
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime,date, time, timedelta
data = pd.read_excel(r'C:\...\DATA.xlsx',index_col= 0)
TT = pd.read_excel(r'C:\...\transit time.xlsx', index_col= 0)
TT.info()
<class 'pandas.core.frame.DataFrame'> Index: 15 entries, HK to KR Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 MIN 15 non-null int64 1 MAX 15 non-null int64 2 Service 15 non-null object dtypes: int64(2), object(1) memory usage: 480.0+ bytes
data.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 978 entries, 5504232 to 5560532 Data columns (total 13 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Service 978 non-null object 1 CountryFrom 978 non-null object 2 Uploading 978 non-null object 3 Pcs 978 non-null int64 4 BrKG 978 non-null float64 5 Vol 978 non-null float64 6 Ordered 978 non-null datetime64[ns] 7 ETD 978 non-null datetime64[ns] 8 ATD 978 non-null datetime64[ns] 9 ETA 978 non-null datetime64[ns] 10 ATA 978 non-null datetime64[ns] 11 UnitTruckRegnr 889 non-null object 12 Unloading 961 non-null object dtypes: datetime64[ns](5), float64(2), int64(1), object(5) memory usage: 107.0+ KB
data.head(3)
| Service | CountryFrom | Uploading | Pcs | BrKG | Vol | Ordered | ETD | ATD | ETA | ATA | UnitTruckRegnr | Unloading | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| FileNr | |||||||||||||
| 5504232 | ML | CN | XIAMEN | 2 | 118.0 | 0.80 | 2022-07-08 | 2022-08-28 | 2022-08-28 | 2022-10-31 | 2022-10-31 | NaN | TALINAS |
| 5500356 | ML | JP | Osaka | 6 | 299.6 | 1.35 | 2022-06-22 | 2022-07-06 | 2022-07-08 | 2022-10-17 | 2022-10-17 | NaN | TALINAS |
| 5506509 | ML | CN | TIANJIN | 3 | 512.0 | 3.72 | 2022-07-19 | 2022-08-07 | 2022-08-08 | 2022-10-17 | 2022-10-17 | NaN | KLAIPEDA |
TT.head(3)
| MIN | MAX | Service | |
|---|---|---|---|
| CountryFrom | |||
| HK | 55 | 65 | ML |
| KR | 55 | 65 | ML |
| TW | 55 | 65 | ML |
def actual_TT(s):
return s['ATA'] - s['ATD']
data['actual_TT'] = data.apply(actual_TT,axis= 'columns')
data.head(3)
| Service | CountryFrom | Uploading | Pcs | BrKG | Vol | Ordered | ETD | ATD | ETA | ATA | UnitTruckRegnr | Unloading | actual_TT | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| FileNr | ||||||||||||||
| 5504232 | ML | CN | XIAMEN | 2 | 118.0 | 0.80 | 2022-07-08 | 2022-08-28 | 2022-08-28 | 2022-10-31 | 2022-10-31 | NaN | TALINAS | 64 days |
| 5500356 | ML | JP | Osaka | 6 | 299.6 | 1.35 | 2022-06-22 | 2022-07-06 | 2022-07-08 | 2022-10-17 | 2022-10-17 | NaN | TALINAS | 101 days |
| 5506509 | ML | CN | TIANJIN | 3 | 512.0 | 3.72 | 2022-07-19 | 2022-08-07 | 2022-08-08 | 2022-10-17 | 2022-10-17 | NaN | KLAIPEDA | 70 days |
data['actual_TT'] = data['actual_TT'].dt.days
print(data.actual_TT.dtype)
int64
data['actual_TT'] = data['actual_TT'].astype(int)
Actual_TT_intervals = data.groupby(['Service', 'CountryFrom'])['actual_TT'].agg([min, max])
Actual_TT_intervals.rename(columns = {'min':'min_actual','max':'max_actual'}, inplace = True)
Actual_TT_intervals.head(5)
| min_actual | max_actual | ||
|---|---|---|---|
| Service | CountryFrom | ||
| ML | CA | 45 | 82 |
| CN | 35 | 75 | |
| HK | 50 | 85 | |
| IL | 53 | 53 | |
| IN | 42 | 67 |
pd.merge(TT, Actual_TT_intervals, on=['CountryFrom', 'Service'], suffixes=('_offered', '_actual'))
#trumpai apžvelgiam min ir max faktinį atvykimą pagal šalį bei servisą su tuo kas buvo žadėta:
| MIN | MAX | Service | min_actual | max_actual | |
|---|---|---|---|---|---|
| CountryFrom | |||||
| HK | 55 | 65 | ML | 50 | 85 |
| KR | 55 | 65 | ML | 66 | 80 |
| TW | 55 | 65 | ML | 42 | 64 |
| JP | 55 | 65 | ML | 80 | 101 |
| CN | 50 | 55 | ML | 35 | 75 |
| IN | 50 | 60 | ML | 42 | 67 |
| US | 40 | 50 | ML | 32 | 82 |
| IL | 50 | 60 | ML | 53 | 53 |
| MY | 55 | 65 | ML | 60 | 60 |
| VN | 55 | 65 | ML | 57 | 78 |
| TH | 55 | 65 | ML | 58 | 76 |
| PH | 55 | 65 | ML | 65 | 71 |
| CA | 40 | 50 | ML | 45 | 82 |
| CN | 18 | 22 | RW | 13 | 28 |
| KR | 45 | 50 | RW | 47 | 58 |
offered_vs_actual = pd.merge(data, TT, on=['CountryFrom', 'Service'], suffixes=('_Actual', '_offered'))
offered_vs_actual = offered_vs_actual.drop(['Pcs', 'BrKG','Vol','UnitTruckRegnr', 'ETD','ETA','Unloading'], axis = 1)
offered_vs_actual.head(10) #sujungiame lenteles kad matytume kas buvo žadėta ir kaip atvyko faktiškai vienoje lentelėje
| Service | CountryFrom | Uploading | Ordered | ATD | ATA | actual_TT | MIN | MAX | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | ML | CN | XIAMEN | 2022-07-08 | 2022-08-28 | 2022-10-31 | 64 | 50 | 55 |
| 1 | ML | CN | TIANJIN | 2022-07-19 | 2022-08-08 | 2022-10-17 | 70 | 50 | 55 |
| 2 | ML | CN | YANTIAN | 2022-07-21 | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 |
| 3 | ML | CN | YANTIAN | 2022-07-26 | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 |
| 4 | ML | CN | YANTIAN | 2022-08-05 | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 |
| 5 | ML | CN | YANTIAN | 2022-08-12 | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 |
| 6 | ML | CN | YANTIAN | 2022-08-12 | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 |
| 7 | ML | CN | YANTIAN | 2022-08-12 | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 |
| 8 | ML | CN | YANTIAN | 2022-08-12 | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 |
| 9 | ML | CN | YANTIAN | 2022-08-16 | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 |
def uzsakymai(s):
if s['actual_TT'] <= s['MAX']:
return("laiku")
else:
return("pavėlavo")
#apibrėžiam kas skaitosi pavėlavęs užsakymas
offered_vs_actual['uzsakymai'] = offered_vs_actual.apply(uzsakymai, axis='columns')
offered_vs_actual.loc[:10,['Service','CountryFrom','Uploading','MAX', 'actual_TT','uzsakymai']]
| Service | CountryFrom | Uploading | MAX | actual_TT | uzsakymai | |
|---|---|---|---|---|---|---|
| 0 | ML | CN | XIAMEN | 55 | 64 | pavėlavo |
| 1 | ML | CN | TIANJIN | 55 | 70 | pavėlavo |
| 2 | ML | CN | YANTIAN | 55 | 39 | laiku |
| 3 | ML | CN | YANTIAN | 55 | 39 | laiku |
| 4 | ML | CN | YANTIAN | 55 | 39 | laiku |
| 5 | ML | CN | YANTIAN | 55 | 39 | laiku |
| 6 | ML | CN | YANTIAN | 55 | 39 | laiku |
| 7 | ML | CN | YANTIAN | 55 | 39 | laiku |
| 8 | ML | CN | YANTIAN | 55 | 39 | laiku |
| 9 | ML | CN | YANTIAN | 55 | 39 | laiku |
| 10 | ML | CN | YANTIAN | 55 | 39 | laiku |
offered_vs_actual['uzsakymai'].value_counts()
laiku 840 pavėlavo 138 Name: uzsakymai, dtype: int64
Visi_uzsakymai=offered_vs_actual['uzsakymai'].value_counts()
Visi_uzsakymai.plot.pie(autopct='%1.1f%%',title = 'Bendras užsakymų įvykdymas',colors= ['#9FE331', 'tomato'])
<AxesSubplot:title={'center':'Bendras užsakymų įvykdymas'}, ylabel='uzsakymai'>
Rail = offered_vs_actual[offered_vs_actual['Service'] == 'RW'].copy()
Rail.loc[:215,['Service','CountryFrom','Uploading','MAX', 'actual_TT','uzsakymai']]
#atskiriam geležinkelio užsakymus
| Service | CountryFrom | Uploading | MAX | actual_TT | uzsakymai | |
|---|---|---|---|---|---|---|
| 205 | RW | CN | XIAN | 22 | 15 | laiku |
| 206 | RW | CN | XIAN | 22 | 15 | laiku |
| 207 | RW | CN | XIAN | 22 | 15 | laiku |
| 208 | RW | CN | XIAN | 22 | 15 | laiku |
| 209 | RW | CN | XIAN | 22 | 15 | laiku |
| 210 | RW | CN | XIAN | 22 | 15 | laiku |
| 211 | RW | CN | XIAN | 22 | 15 | laiku |
| 212 | RW | CN | XIAN | 22 | 15 | laiku |
| 213 | RW | CN | XIAN | 22 | 15 | laiku |
| 214 | RW | CN | XIAN | 22 | 15 | laiku |
| 215 | RW | CN | XIAN | 22 | 15 | laiku |
Rail['uzsakymai'].value_counts()
laiku 605 pavėlavo 41 Name: uzsakymai, dtype: int64
Rail_uzsakymai=Rail['uzsakymai'].value_counts()
Rail_uzsakymai.plot.pie(autopct='%1.1f%%', title = 'Rail užsakymų įvykdymas', colors= ['#9FE331', 'tomato'])
<AxesSubplot:title={'center':'Rail užsakymų įvykdymas'}, ylabel='uzsakymai'>
def anksciau(s):
return s['MAX'] - s['actual_TT']
Rail['dienu_skirtumas'] = Rail.apply(anksciau, axis = 'columns')
Rail.loc[:215,['Service','CountryFrom','Uploading','MAX', 'actual_TT','uzsakymai','dienu_skirtumas']]
| Service | CountryFrom | Uploading | MAX | actual_TT | uzsakymai | dienu_skirtumas | |
|---|---|---|---|---|---|---|---|
| 205 | RW | CN | XIAN | 22 | 15 | laiku | 7 |
| 206 | RW | CN | XIAN | 22 | 15 | laiku | 7 |
| 207 | RW | CN | XIAN | 22 | 15 | laiku | 7 |
| 208 | RW | CN | XIAN | 22 | 15 | laiku | 7 |
| 209 | RW | CN | XIAN | 22 | 15 | laiku | 7 |
| 210 | RW | CN | XIAN | 22 | 15 | laiku | 7 |
| 211 | RW | CN | XIAN | 22 | 15 | laiku | 7 |
| 212 | RW | CN | XIAN | 22 | 15 | laiku | 7 |
| 213 | RW | CN | XIAN | 22 | 15 | laiku | 7 |
| 214 | RW | CN | XIAN | 22 | 15 | laiku | 7 |
| 215 | RW | CN | XIAN | 22 | 15 | laiku | 7 |
Rail.groupby('dienu_skirtumas')['Uploading'].count()
#pasižiūrime kaip išsibarstę atvykimai kad nustatyti periodus funkcijai
dienu_skirtumas -8 1 -6 21 -2 19 1 26 2 24 3 25 4 97 5 133 6 88 7 136 8 45 9 31 Name: Uploading, dtype: int64
def atvykimas(s):
if s['MAX'] - s['actual_TT'] >= 7:
return("atvyko 7 ir daugiau dienomis anksčiau")
elif 5 <= s['MAX'] - s['actual_TT'] < 7:
return("atvyko nuo 5 iki 7 dienų anksčiau")
elif 0 <= s['MAX'] - s['actual_TT'] < 5:
return("atvyko laiku")
elif s['dienu_skirtumas'] == -2:
return("pavėlavo 2 dienomis")
elif s['dienu_skirtumas'] == -6:
return("pavėlavo 6 dienomis")
else:
return("pavėlavo 8 dienomis")
Rail['atvykimas'] = Rail.apply(atvykimas, axis='columns')
Rail.loc[:500,['Service','CountryFrom','Uploading','MAX', 'actual_TT','uzsakymai','atvykimas']]
| Service | CountryFrom | Uploading | MAX | actual_TT | uzsakymai | atvykimas | |
|---|---|---|---|---|---|---|---|
| 205 | RW | CN | XIAN | 22 | 15 | laiku | atvyko 7 ir daugiau dienomis anksčiau |
| 206 | RW | CN | XIAN | 22 | 15 | laiku | atvyko 7 ir daugiau dienomis anksčiau |
| 207 | RW | CN | XIAN | 22 | 15 | laiku | atvyko 7 ir daugiau dienomis anksčiau |
| 208 | RW | CN | XIAN | 22 | 15 | laiku | atvyko 7 ir daugiau dienomis anksčiau |
| 209 | RW | CN | XIAN | 22 | 15 | laiku | atvyko 7 ir daugiau dienomis anksčiau |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 496 | RW | CN | XIAN | 22 | 17 | laiku | atvyko nuo 5 iki 7 dienų anksčiau |
| 497 | RW | CN | XIAN | 22 | 21 | laiku | atvyko laiku |
| 498 | RW | CN | XIAN | 22 | 17 | laiku | atvyko nuo 5 iki 7 dienų anksčiau |
| 499 | RW | CN | XIAN | 22 | 21 | laiku | atvyko laiku |
| 500 | RW | CN | XIAN | 22 | 17 | laiku | atvyko nuo 5 iki 7 dienų anksčiau |
296 rows × 7 columns
Detalus_rail=Rail['atvykimas'].value_counts()
Detalus_rail.plot.pie(autopct='%1.1f%%', title = 'Detalesnė Rail užsakymų analizė', colors= ['yellowgreen', 'green', 'plum', 'tomato', 'darkorange','gold'])
<AxesSubplot:title={'center':'Detalesnė Rail užsakymų analizė'}, ylabel='atvykimas'>
rail_min = Rail['actual_TT'].min(axis=0)
rail_min
13
rail_CN = Rail[Rail['CountryFrom'] =='CN']
rail_CN['actual_TT'].mean()
17.10248447204969
rail_KR = Rail[Rail['CountryFrom'] =='KR']
rail_KR['actual_TT'].mean()
52.5
Rail[Rail['dienu_skirtumas'] > 0].sort_values(by='ATA',ascending = False)
#matome kad didelė dalis krovinių atvyko anksčiau, kadangi paskutiniai kroviniai atvyko anksčiau,
#vidutinis TT laikas sudaro 17d, būtų galima mažinti tranzitinį laiką pasiūlymuose iki 16-18d
| Service | CountryFrom | Uploading | Ordered | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | dienu_skirtumas | atvykimas | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 841 | RW | CN | CHENGDU | 2023-02-28 | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku | 7 | atvyko 7 ir daugiau dienomis anksčiau |
| 848 | RW | CN | CHENGDU | 2023-03-02 | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku | 7 | atvyko 7 ir daugiau dienomis anksčiau |
| 847 | RW | CN | CHENGDU | 2023-03-01 | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku | 7 | atvyko 7 ir daugiau dienomis anksčiau |
| 846 | RW | CN | CHENGDU | 2023-03-01 | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku | 7 | atvyko 7 ir daugiau dienomis anksčiau |
| 845 | RW | CN | CHENGDU | 2023-03-01 | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku | 7 | atvyko 7 ir daugiau dienomis anksčiau |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 225 | RW | CN | XIAN | 2022-09-20 | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku | 7 | atvyko 7 ir daugiau dienomis anksčiau |
| 226 | RW | CN | XIAN | 2022-09-20 | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku | 7 | atvyko 7 ir daugiau dienomis anksčiau |
| 227 | RW | CN | XIAN | 2022-09-20 | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku | 7 | atvyko 7 ir daugiau dienomis anksčiau |
| 228 | RW | CN | XIAN | 2022-09-29 | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku | 7 | atvyko 7 ir daugiau dienomis anksčiau |
| 205 | RW | CN | XIAN | 2022-08-16 | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku | 7 | atvyko 7 ir daugiau dienomis anksčiau |
605 rows × 12 columns
Pavėluotas_rail = Rail[Rail['actual_TT'] > Rail['MAX']]
Pavėluotas_rail.groupby('dienu_skirtumas').agg({'dienu_skirtumas': 'count', 'MAX':'max', 'actual_TT': 'max'})
| dienu_skirtumas | MAX | actual_TT | |
|---|---|---|---|
| dienu_skirtumas | |||
| -8 | 1 | 50 | 58 |
| -6 | 21 | 22 | 28 |
| -2 | 19 | 22 | 24 |
Pavėluotas_rail[Pavėluotas_rail['dienu_skirtumas'] <= -2].sort_values(by='ATA',ascending = False)
| Service | CountryFrom | Uploading | Ordered | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | dienu_skirtumas | atvykimas | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 719 | RW | CN | XIAN | 2023-01-05 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 729 | RW | CN | XIAN | 2023-01-10 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 718 | RW | CN | XIAN | 2023-01-05 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 722 | RW | CN | XIAN | 2023-01-06 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 723 | RW | CN | XIAN | 2023-01-06 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 724 | RW | CN | XIAN | 2023-01-06 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 725 | RW | CN | XIAN | 2023-01-09 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 726 | RW | CN | XIAN | 2023-01-09 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 727 | RW | CN | XIAN | 2023-01-09 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 728 | RW | CN | XIAN | 2023-01-10 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 730 | RW | CN | XIAN | 2023-01-10 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 720 | RW | CN | XIAN | 2023-01-06 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 731 | RW | CN | XIAN | 2023-01-10 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 732 | RW | CN | XIAN | 2023-01-10 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 733 | RW | CN | XIAN | 2023-01-10 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 734 | RW | CN | XIAN | 2023-01-10 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 735 | RW | CN | XIAN | 2023-01-11 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 736 | RW | CN | XIAN | 2023-01-11 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 737 | RW | CN | XIAN | 2023-01-13 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 738 | RW | CN | XIAN | 2023-01-13 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 721 | RW | CN | XIAN | 2023-01-06 | 2023-02-14 | 2023-03-14 | 28 | 18 | 22 | pavėlavo | -6 | pavėlavo 6 dienomis |
| 975 | RW | KR | WUHAN | 2022-11-29 | 2022-12-10 | 2023-02-06 | 58 | 45 | 50 | pavėlavo | -8 | pavėlavo 8 dienomis |
| 631 | RW | CN | XIAN | 2022-11-25 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 639 | RW | CN | XIAN | 2022-12-12 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 632 | RW | CN | XIAN | 2022-12-06 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 633 | RW | CN | XIAN | 2022-12-08 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 634 | RW | CN | XIAN | 2022-12-08 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 635 | RW | CN | XIAN | 2022-12-09 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 636 | RW | CN | XIAN | 2022-12-12 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 637 | RW | CN | XIAN | 2022-12-12 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 638 | RW | CN | XIAN | 2022-12-12 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 640 | RW | CN | XIAN | 2022-12-13 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 648 | RW | CN | XIAN | 2023-01-03 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 641 | RW | CN | XIAN | 2022-12-13 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 642 | RW | CN | XIAN | 2022-12-13 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 643 | RW | CN | XIAN | 2022-12-13 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 644 | RW | CN | XIAN | 2022-12-13 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 645 | RW | CN | XIAN | 2022-12-13 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 646 | RW | CN | XIAN | 2022-12-14 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 647 | RW | CN | XIAN | 2022-12-14 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
| 630 | RW | CN | XIAN | 2022-10-26 | 2023-01-02 | 2023-01-26 | 24 | 18 | 22 | pavėlavo | -2 | pavėlavo 2 dienomis |
Rail_vėvavimai=Pavėluotas_rail.groupby('dienu_skirtumas')['Uploading'].count()
Rail_vėvavimai.plot.pie(autopct='%1.1f%%', title = 'Vėluojančių Rail užsakymų analizė', colors= ['tomato','orange','gold'])
<AxesSubplot:title={'center':'Vėluojančių Rail užsakymų analizė'}, ylabel='Uploading'>
Rail_CN=rail_CN.drop(['Service', 'CountryFrom', 'Ordered','atvykimas','dienu_skirtumas'], axis = 1).copy()
Rail_CN
| Uploading | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | |
|---|---|---|---|---|---|---|---|
| 205 | XIAN | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku |
| 206 | XIAN | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku |
| 207 | XIAN | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku |
| 208 | XIAN | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku |
| 209 | XIAN | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 844 | CHENGDU | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku |
| 845 | CHENGDU | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku |
| 846 | CHENGDU | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku |
| 847 | CHENGDU | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku |
| 848 | CHENGDU | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku |
644 rows × 7 columns
Rail_CN['year/month'] = pd.to_datetime(Rail_CN['ATA']).dt.to_period('M')
Rail_CN
| Uploading | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | year/month | |
|---|---|---|---|---|---|---|---|---|
| 205 | XIAN | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku | 2022-10 |
| 206 | XIAN | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku | 2022-10 |
| 207 | XIAN | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku | 2022-10 |
| 208 | XIAN | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku | 2022-10 |
| 209 | XIAN | 2022-10-02 | 2022-10-17 | 15 | 18 | 22 | laiku | 2022-10 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 844 | CHENGDU | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku | 2023-04 |
| 845 | CHENGDU | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku | 2023-04 |
| 846 | CHENGDU | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku | 2023-04 |
| 847 | CHENGDU | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku | 2023-04 |
| 848 | CHENGDU | 2023-03-22 | 2023-04-06 | 15 | 18 | 22 | laiku | 2023-04 |
644 rows × 8 columns
sns.barplot(x='year/month', y='actual_TT', data=Rail_CN)
<AxesSubplot:xlabel='year/month', ylabel='actual_TT'>
#Atlikus analizę pagal atvykimo laiką matome kad pastaraisias mėnesiais tranzito laikas kiek svyravo,
#tačiau balandžio mėnesį tranzito laikas sumažėjo ir šiuo metu yra mažesnis, nei siūlomas klientams (18-22), todėl
#būtų galima drąsiai mažinti tranzito laiką klientams iki 16-18d
Sea = offered_vs_actual[offered_vs_actual['Service'] == 'ML'].copy()
Sea.loc[:,['Service','CountryFrom','Uploading','MAX', 'actual_TT','uzsakymai']]
| Service | CountryFrom | Uploading | MAX | actual_TT | uzsakymai | |
|---|---|---|---|---|---|---|
| 0 | ML | CN | XIAMEN | 55 | 64 | pavėlavo |
| 1 | ML | CN | TIANJIN | 55 | 70 | pavėlavo |
| 2 | ML | CN | YANTIAN | 55 | 39 | laiku |
| 3 | ML | CN | YANTIAN | 55 | 39 | laiku |
| 4 | ML | CN | YANTIAN | 55 | 39 | laiku |
| ... | ... | ... | ... | ... | ... | ... |
| 971 | ML | TH | BANGKOK | 65 | 76 | pavėlavo |
| 972 | ML | TH | BANGKOK | 65 | 58 | laiku |
| 973 | ML | PH | MANILA | 65 | 65 | laiku |
| 974 | ML | PH | MANILA | 65 | 71 | pavėlavo |
| 977 | ML | IL | HAIFA | 60 | 53 | laiku |
332 rows × 6 columns
Sea['uzsakymai'].value_counts()
laiku 235 pavėlavo 97 Name: uzsakymai, dtype: int64
Sea_uzsakymai=Sea['uzsakymai'].value_counts()
Sea_uzsakymai.plot.pie(autopct='%1.1f%%', title = 'Sea užsakymų įvykdymas', colors= ['#9FE331', 'tomato'])
<AxesSubplot:title={'center':'Sea užsakymų įvykdymas'}, ylabel='uzsakymai'>
Sea.groupby('Uploading')['uzsakymai'].count().sort_values().plot(title='Bendras Sea užsakymų paskirstymas per uostus', kind='barh',figsize=(5,5),color='royalblue')
<AxesSubplot:title={'center':'Bendras Sea užsakymų paskirstymas per uostus'}, ylabel='Uploading'>
Sea.groupby('CountryFrom')['actual_TT'].mean().sort_values(ascending=False).plot(title='Faktinis tranzito laikas pagal uostus')
<AxesSubplot:title={'center':'Faktinis tranzito laikas pagal uostus'}, xlabel='CountryFrom'>
def sea_anksciau(s):
return s['MAX'] - s['actual_TT']
Sea['dienu_skirtumas'] = Sea.apply(sea_anksciau, axis = 'columns')
Sea.loc[:200,['Service','CountryFrom','Uploading','MIN','MAX', 'actual_TT','uzsakymai','dienu_skirtumas']]
| Service | CountryFrom | Uploading | MIN | MAX | actual_TT | uzsakymai | dienu_skirtumas | |
|---|---|---|---|---|---|---|---|---|
| 0 | ML | CN | XIAMEN | 50 | 55 | 64 | pavėlavo | -9 |
| 1 | ML | CN | TIANJIN | 50 | 55 | 70 | pavėlavo | -15 |
| 2 | ML | CN | YANTIAN | 50 | 55 | 39 | laiku | 16 |
| 3 | ML | CN | YANTIAN | 50 | 55 | 39 | laiku | 16 |
| 4 | ML | CN | YANTIAN | 50 | 55 | 39 | laiku | 16 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 196 | ML | CN | NINGBO | 50 | 55 | 50 | laiku | 5 |
| 197 | ML | CN | NINGBO | 50 | 55 | 50 | laiku | 5 |
| 198 | ML | CN | NINGBO | 50 | 55 | 50 | laiku | 5 |
| 199 | ML | CN | NINGBO | 50 | 55 | 50 | laiku | 5 |
| 200 | ML | CN | NINGBO | 50 | 55 | 50 | laiku | 5 |
201 rows × 8 columns
Sea.groupby('dienu_skirtumas')['Uploading'].count()
#žiūrime kaip išsibarstę atvykimai anksčiau bei vėlavimai kad nustatyti periodus
dienu_skirtumas -36 1 -32 2 -26 1 -20 2 -18 1 -15 5 -14 10 -13 7 -12 3 -11 4 -9 2 -8 4 -7 5 -6 5 -5 2 -4 19 -2 22 -1 2 0 6 1 4 2 1 3 31 4 1 5 20 6 26 7 3 8 17 9 22 10 6 11 21 12 15 13 5 14 3 15 21 16 13 17 8 18 6 19 1 20 4 23 1 Name: Uploading, dtype: int64
def sea_atvykimas(s):
if s['MAX'] - s['actual_TT'] >= 11:
return("atvyko daugiau nei 11 dienomis anksčiau")
elif 0 <= s['MAX'] - s['actual_TT'] < 11:
return("atvyko laiku")
else:
return("pavėlavo")
Sea['sea_atvykimas'] = Sea.apply(sea_atvykimas, axis='columns')
Sea.loc[:20,['Service','CountryFrom','Uploading','MAX', 'actual_TT','sea_atvykimas']]
| Service | CountryFrom | Uploading | MAX | actual_TT | sea_atvykimas | |
|---|---|---|---|---|---|---|
| 0 | ML | CN | XIAMEN | 55 | 64 | pavėlavo |
| 1 | ML | CN | TIANJIN | 55 | 70 | pavėlavo |
| 2 | ML | CN | YANTIAN | 55 | 39 | atvyko daugiau nei 11 dienomis anksčiau |
| 3 | ML | CN | YANTIAN | 55 | 39 | atvyko daugiau nei 11 dienomis anksčiau |
| 4 | ML | CN | YANTIAN | 55 | 39 | atvyko daugiau nei 11 dienomis anksčiau |
| 5 | ML | CN | YANTIAN | 55 | 39 | atvyko daugiau nei 11 dienomis anksčiau |
| 6 | ML | CN | YANTIAN | 55 | 39 | atvyko daugiau nei 11 dienomis anksčiau |
| 7 | ML | CN | YANTIAN | 55 | 39 | atvyko daugiau nei 11 dienomis anksčiau |
| 8 | ML | CN | YANTIAN | 55 | 39 | atvyko daugiau nei 11 dienomis anksčiau |
| 9 | ML | CN | YANTIAN | 55 | 39 | atvyko daugiau nei 11 dienomis anksčiau |
| 10 | ML | CN | YANTIAN | 55 | 39 | atvyko daugiau nei 11 dienomis anksčiau |
| 11 | ML | CN | YANTIAN | 55 | 39 | atvyko daugiau nei 11 dienomis anksčiau |
| 12 | ML | CN | YANTIAN | 55 | 39 | atvyko daugiau nei 11 dienomis anksčiau |
| 13 | ML | CN | YANTIAN | 55 | 39 | atvyko daugiau nei 11 dienomis anksčiau |
| 14 | ML | CN | NINGBO | 55 | 49 | atvyko laiku |
| 15 | ML | CN | YANTIAN | 55 | 69 | pavėlavo |
| 16 | ML | CN | YANTIAN | 55 | 69 | pavėlavo |
| 17 | ML | CN | YANTIAN | 55 | 69 | pavėlavo |
| 18 | ML | CN | YANTIAN | 55 | 69 | pavėlavo |
| 19 | ML | CN | YANTIAN | 55 | 69 | pavėlavo |
| 20 | ML | CN | YANTIAN | 55 | 69 | pavėlavo |
Sea['sea_atvykimas'].value_counts()
atvyko laiku 137 atvyko daugiau nei 11 dienomis anksčiau 98 pavėlavo 97 Name: sea_atvykimas, dtype: int64
Detalus_sea=Sea['sea_atvykimas'].value_counts()
Detalus_sea.plot.pie(autopct='%1.1f%%', title = 'Detalesnė Sea užsakymų analizė', colors= ['#9FE331', 'tomato', 'plum', '#3CA4D8'])
<AxesSubplot:title={'center':'Detalesnė Sea užsakymų analizė'}, ylabel='sea_atvykimas'>
Sea_a.groupby('Uploading')['uzsakymai'].count().sort_values().plot(title='Sea anksčiau atvykusių užsakymų paskirstymas per uostus', kind='barh',figsize=(5,5),color='royalblue')
<AxesSubplot:title={'center':'Sea anksčiau atvykusių užsakymų paskirstymas per uostus'}, ylabel='Uploading'>
Sea_anksciau = Sea[Sea['dienu_skirtumas'] >=0].sort_values(by='dienu_skirtumas',ascending=False)
Sea_a =Sea_anksciau.set_index(['Uploading', 'dienu_skirtumas','actual_TT'])
Sea_a.head(15)
| Service | CountryFrom | Ordered | ATD | ATA | MIN | MAX | uzsakymai | sea_atvykimas | |||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Uploading | dienu_skirtumas | actual_TT | |||||||||
| KEELUNG | 23 | 42 | ML | TW | 2023-01-04 | 2023-01-26 | 2023-03-09 | 55 | 65 | laiku | atvyko daugiau nei 11 dienomis anksčiau |
| YANTIAN | 20 | 35 | ML | CN | 2022-12-19 | 2023-02-03 | 2023-03-10 | 50 | 55 | laiku | atvyko daugiau nei 11 dienomis anksčiau |
| KAOHSIUNG | 20 | 45 | ML | TW | 2022-12-08 | 2022-12-30 | 2023-02-13 | 55 | 65 | laiku | atvyko daugiau nei 11 dienomis anksčiau |
| 45 | ML | TW | 2022-12-07 | 2022-12-30 | 2023-02-13 | 55 | 65 | laiku | atvyko daugiau nei 11 dienomis anksčiau | ||
| 45 | ML | TW | 2022-12-06 | 2022-12-30 | 2023-02-13 | 55 | 65 | laiku | atvyko daugiau nei 11 dienomis anksčiau | ||
| 19 | 46 | ML | TW | 2022-10-11 | 2022-10-31 | 2022-12-16 | 55 | 65 | laiku | atvyko daugiau nei 11 dienomis anksčiau | |
| 18 | 47 | ML | TW | 2022-12-12 | 2023-01-11 | 2023-02-27 | 55 | 65 | laiku | atvyko daugiau nei 11 dienomis anksčiau | |
| NEW YORK | 18 | 32 | ML | US | 2022-10-07 | 2022-10-30 | 2022-12-01 | 40 | 50 | laiku | atvyko daugiau nei 11 dienomis anksčiau |
| NHAVA SHEVA | 18 | 42 | ML | IN | 2022-11-22 | 2022-12-12 | 2023-01-23 | 50 | 60 | laiku | atvyko daugiau nei 11 dienomis anksčiau |
| KAOHSIUNG | 18 | 47 | ML | TW | 2022-12-22 | 2023-01-11 | 2023-02-27 | 55 | 65 | laiku | atvyko daugiau nei 11 dienomis anksčiau |
| 47 | ML | TW | 2022-12-14 | 2023-01-11 | 2023-02-27 | 55 | 65 | laiku | atvyko daugiau nei 11 dienomis anksčiau | ||
| 47 | ML | TW | 2022-12-07 | 2023-01-11 | 2023-02-27 | 55 | 65 | laiku | atvyko daugiau nei 11 dienomis anksčiau | ||
| YANTIAN | 17 | 38 | ML | CN | 2022-09-28 | 2022-11-29 | 2023-01-06 | 50 | 55 | laiku | atvyko daugiau nei 11 dienomis anksčiau |
| 38 | ML | CN | 2022-11-04 | 2022-11-29 | 2023-01-06 | 50 | 55 | laiku | atvyko daugiau nei 11 dienomis anksčiau | ||
| NHAVA SHEVA | 17 | 43 | ML | IN | 2022-12-01 | 2022-12-11 | 2023-01-23 | 50 | 60 | laiku | atvyko daugiau nei 11 dienomis anksčiau |
def sea_vėlavimas(s):
if s['dienu_skirtumas'] <= -21:
return("virš 3 savaičių vėlavimas")
elif -21 < s['dienu_skirtumas'] <= -14:
return("vėlavimas nuo 2 iki 3 savaičių")
elif -14 < s['dienu_skirtumas'] <= -7:
return("vėlavimas nuo 1 iki 2 savaičių")
elif -7 < s['dienu_skirtumas'] <= -1:
return("vėlavimas iki 1 savaitės")
else:
return("laiku")
Sea['sea_vėlavimas'] = Sea.apply(sea_vėlavimas, axis='columns')
Sea.loc[:300,['Service','CountryFrom','Uploading','MAX', 'MIN','actual_TT','dienu_skirtumas', 'sea_vėlavimas']]
| Service | CountryFrom | Uploading | MAX | MIN | actual_TT | dienu_skirtumas | sea_vėlavimas | |
|---|---|---|---|---|---|---|---|---|
| 0 | ML | CN | XIAMEN | 55 | 50 | 64 | -9 | vėlavimas nuo 1 iki 2 savaičių |
| 1 | ML | CN | TIANJIN | 55 | 50 | 70 | -15 | vėlavimas nuo 2 iki 3 savaičių |
| 2 | ML | CN | YANTIAN | 55 | 50 | 39 | 16 | laiku |
| 3 | ML | CN | YANTIAN | 55 | 50 | 39 | 16 | laiku |
| 4 | ML | CN | YANTIAN | 55 | 50 | 39 | 16 | laiku |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 200 | ML | CN | NINGBO | 55 | 50 | 50 | 5 | laiku |
| 201 | ML | CN | QINGDAO | 55 | 50 | 68 | -13 | vėlavimas nuo 1 iki 2 savaičių |
| 202 | ML | JP | Osaka | 65 | 55 | 101 | -36 | virš 3 savaičių vėlavimas |
| 203 | ML | JP | KOBE | 65 | 55 | 80 | -15 | vėlavimas nuo 2 iki 3 savaičių |
| 204 | ML | JP | KOBE | 65 | 55 | 91 | -26 | virš 3 savaičių vėlavimas |
205 rows × 8 columns
Sea_vėlavimas = Sea['sea_vėlavimas'].value_counts()
Sea['sea_vėlavimas'].value_counts()
laiku 235 vėlavimas iki 1 savaitės 50 vėlavimas nuo 1 iki 2 savaičių 25 vėlavimas nuo 2 iki 3 savaičių 18 virš 3 savaičių vėlavimas 4 Name: sea_vėlavimas, dtype: int64
Sea_vėlavimas.plot.pie(autopct='%1.1f%%', title = 'Sea vėlavimų užsakymų analizė', colors= ['#9FE331', 'gold', 'plum', '#3CA4D8', 'tomato'])
<AxesSubplot:title={'center':'Sea vėlavimų užsakymų analizė'}, ylabel='sea_vėlavimas'>
Sea_d.groupby('Uploading')['uzsakymai'].count().sort_values().plot(title='Sea vėluojančių užsakymų paskirstymas per uostus', kind='barh',figsize=(5,5),color='royalblue')
<AxesSubplot:title={'center':'Sea vėluojančių užsakymų paskirstymas per uostus'}, ylabel='Uploading'>
Sea_delay = Sea[Sea['dienu_skirtumas'] <0].sort_values(by='dienu_skirtumas',ascending=True)
Sea_d =Sea_delay.set_index(['Uploading', 'dienu_skirtumas', 'sea_vėlavimas'])
Sea_d.head(15)
| Service | CountryFrom | Ordered | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | sea_atvykimas | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Uploading | dienu_skirtumas | sea_vėlavimas | ||||||||||
| Osaka | -36 | virš 3 savaičių vėlavimas | ML | JP | 2022-06-22 | 2022-07-08 | 2022-10-17 | 101 | 55 | 65 | pavėlavo | pavėlavo |
| NEW YORK | -32 | virš 3 savaičių vėlavimas | ML | US | 2022-07-07 | 2022-08-19 | 2022-11-09 | 82 | 40 | 50 | pavėlavo | pavėlavo |
| virš 3 savaičių vėlavimas | ML | CA | 2022-07-25 | 2022-08-19 | 2022-11-09 | 82 | 40 | 50 | pavėlavo | pavėlavo | ||
| KOBE | -26 | virš 3 savaičių vėlavimas | ML | JP | 2022-10-06 | 2022-10-20 | 2023-01-19 | 91 | 55 | 65 | pavėlavo | pavėlavo |
| HONG KONG | -20 | vėlavimas nuo 2 iki 3 savaičių | ML | HK | 2022-07-20 | 2022-08-01 | 2022-10-25 | 85 | 55 | 65 | pavėlavo | pavėlavo |
| QINGDAO | -20 | vėlavimas nuo 2 iki 3 savaičių | ML | CN | 2022-11-09 | 2022-12-04 | 2023-02-17 | 75 | 50 | 55 | pavėlavo | pavėlavo |
| XINGANG | -18 | vėlavimas nuo 2 iki 3 savaičių | ML | CN | 2022-11-23 | 2022-12-12 | 2023-02-23 | 73 | 50 | 55 | pavėlavo | pavėlavo |
| HONG KONG | -15 | vėlavimas nuo 2 iki 3 savaičių | ML | HK | 2022-06-30 | 2022-08-16 | 2022-11-04 | 80 | 55 | 65 | pavėlavo | pavėlavo |
| TIANJIN | -15 | vėlavimas nuo 2 iki 3 savaičių | ML | CN | 2022-07-19 | 2022-08-08 | 2022-10-17 | 70 | 50 | 55 | pavėlavo | pavėlavo |
| HONG KONG | -15 | vėlavimas nuo 2 iki 3 savaičių | ML | HK | 2022-08-08 | 2022-08-16 | 2022-11-04 | 80 | 55 | 65 | pavėlavo | pavėlavo |
| KOBE | -15 | vėlavimas nuo 2 iki 3 savaičių | ML | JP | 2022-09-02 | 2022-09-17 | 2022-12-06 | 80 | 55 | 65 | pavėlavo | pavėlavo |
| BUSAN | -15 | vėlavimas nuo 2 iki 3 savaičių | ML | KR | 2022-12-16 | 2023-01-07 | 2023-03-28 | 80 | 55 | 65 | pavėlavo | pavėlavo |
| NEW YORK | -14 | vėlavimas nuo 2 iki 3 savaičių | ML | US | 2022-08-25 | 2022-09-28 | 2022-12-01 | 64 | 40 | 50 | pavėlavo | pavėlavo |
| YANTIAN | -14 | vėlavimas nuo 2 iki 3 savaičių | ML | CN | 2022-07-19 | 2022-08-23 | 2022-10-31 | 69 | 50 | 55 | pavėlavo | pavėlavo |
| vėlavimas nuo 2 iki 3 savaičių | ML | CN | 2022-08-01 | 2022-08-23 | 2022-10-31 | 69 | 50 | 55 | pavėlavo | pavėlavo |
Sea.groupby(['CountryFrom', 'Uploading']).agg({'CountryFrom':'count','actual_TT':'mean', 'MAX':'max'})
| CountryFrom | actual_TT | MAX | ||
|---|---|---|---|---|
| CountryFrom | Uploading | |||
| CA | NEW YORK | 2 | 63.500000 | 50 |
| CN | BEIJING | 1 | 67.000000 | 55 |
| NANSHA | 22 | 56.454545 | 55 | |
| NINGBO | 75 | 51.146667 | 55 | |
| QINGDAO | 3 | 68.000000 | 55 | |
| SHANGHAI | 4 | 60.000000 | 55 | |
| TIANJIN | 3 | 68.000000 | 55 | |
| XIAMEN | 5 | 57.000000 | 55 | |
| XINGANG | 1 | 73.000000 | 55 | |
| YANTIAN | 88 | 47.659091 | 55 | |
| HK | HONG KONG | 34 | 59.205882 | 65 |
| IL | HAIFA | 1 | 53.000000 | 60 |
| IN | NHAVA SHEVA | 10 | 49.200000 | 60 |
| JP | KOBE | 2 | 85.500000 | 65 |
| Osaka | 1 | 101.000000 | 65 | |
| KR | BUSAN | 6 | 71.333333 | 65 |
| MY | PENANG | 1 | 60.000000 | 65 |
| PH | MANILA | 2 | 68.000000 | 65 |
| TH | BANGKOK | 2 | 67.000000 | 65 |
| TW | KAOHSIUNG | 36 | 53.305556 | 65 |
| KEELUNG | 6 | 52.000000 | 65 | |
| US | LOS ANGELES | 1 | 44.000000 | 50 |
| NEW YORK | 14 | 52.142857 | 50 | |
| VN | HO CHI MINH | 12 | 68.416667 | 65 |
sea_min = Sea['actual_TT'].min(axis=0)
sea_min
32
Sea_China = Sea[Sea['CountryFrom'] == 'CN'].copy()
Sea_China.sort_values(by='ATA',ascending = False)
| Service | CountryFrom | Uploading | Ordered | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | dienu_skirtumas | sea_atvykimas | sea_vėlavimas | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 201 | ML | CN | QINGDAO | 2023-01-02 | 2023-01-27 | 2023-04-05 | 68 | 50 | 55 | pavėlavo | -13 | pavėlavo | vėlavimas nuo 1 iki 2 savaičių |
| 192 | ML | CN | NINGBO | 2023-01-02 | 2023-01-30 | 2023-03-21 | 50 | 50 | 55 | laiku | 5 | atvyko laiku | laiku |
| 184 | ML | CN | NINGBO | 2022-12-15 | 2023-01-30 | 2023-03-21 | 50 | 50 | 55 | laiku | 5 | atvyko laiku | laiku |
| 185 | ML | CN | NINGBO | 2022-12-15 | 2023-01-30 | 2023-03-21 | 50 | 50 | 55 | laiku | 5 | atvyko laiku | laiku |
| 186 | ML | CN | NINGBO | 2022-12-19 | 2023-01-30 | 2023-03-21 | 50 | 50 | 55 | laiku | 5 | atvyko laiku | laiku |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 9 | ML | CN | YANTIAN | 2022-08-16 | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 | laiku | 16 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 10 | ML | CN | YANTIAN | 2022-08-17 | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 | laiku | 16 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 12 | ML | CN | YANTIAN | 2022-08-22 | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 | laiku | 16 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 13 | ML | CN | YANTIAN | 2022-08-24 | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 | laiku | 16 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 1 | ML | CN | TIANJIN | 2022-07-19 | 2022-08-08 | 2022-10-17 | 70 | 50 | 55 | pavėlavo | -15 | pavėlavo | vėlavimas nuo 2 iki 3 savaičių |
202 rows × 13 columns
Sea_China['actual_TT'].mean()
#turime daug CN uostų, matome kad TT vidurkis atitinka pagal pasiūlymą, tačiau būtų galima išskirti pagrindinius tranzito
# uostus nuo outportų ir iškirstyti tranzito laiką - pvz QINGDAO,TIANJIN,XINGANG, BEIJING galima būtų ilginti TT iki
# 60-70d, NANSHA uostą- kolkas stebėti, o NINGBO bei YANTIAN uostus būtų galima trumptinti iki 45-50d
51.21287128712871
Sea[Sea['Uploading'] == 'NANSHA'].sort_values(by='ATA',ascending = False)
| Service | CountryFrom | Uploading | Ordered | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | dienu_skirtumas | sea_atvykimas | sea_vėlavimas | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 183 | ML | CN | NANSHA | 2023-01-06 | 2023-01-20 | 2023-03-13 | 52 | 50 | 55 | laiku | 3 | atvyko laiku | laiku |
| 182 | ML | CN | NANSHA | 2023-01-05 | 2023-01-20 | 2023-03-13 | 52 | 50 | 55 | laiku | 3 | atvyko laiku | laiku |
| 181 | ML | CN | NANSHA | 2023-01-05 | 2023-01-20 | 2023-03-13 | 52 | 50 | 55 | laiku | 3 | atvyko laiku | laiku |
| 180 | ML | CN | NANSHA | 2023-01-04 | 2023-01-20 | 2023-03-13 | 52 | 50 | 55 | laiku | 3 | atvyko laiku | laiku |
| 179 | ML | CN | NANSHA | 2023-01-04 | 2023-01-20 | 2023-03-13 | 52 | 50 | 55 | laiku | 3 | atvyko laiku | laiku |
| 178 | ML | CN | NANSHA | 2023-01-04 | 2023-01-20 | 2023-03-13 | 52 | 50 | 55 | laiku | 3 | atvyko laiku | laiku |
| 177 | ML | CN | NANSHA | 2022-12-30 | 2023-01-20 | 2023-03-13 | 52 | 50 | 55 | laiku | 3 | atvyko laiku | laiku |
| 176 | ML | CN | NANSHA | 2022-12-19 | 2023-01-20 | 2023-03-13 | 52 | 50 | 55 | laiku | 3 | atvyko laiku | laiku |
| 149 | ML | CN | NANSHA | 2022-11-18 | 2023-01-01 | 2023-03-01 | 59 | 50 | 55 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 161 | ML | CN | NANSHA | 2022-12-14 | 2023-01-01 | 2023-03-01 | 59 | 50 | 55 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 160 | ML | CN | NANSHA | 2022-12-14 | 2023-01-01 | 2023-03-01 | 59 | 50 | 55 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 148 | ML | CN | NANSHA | 2022-11-16 | 2023-01-01 | 2023-03-01 | 59 | 50 | 55 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 158 | ML | CN | NANSHA | 2022-12-07 | 2023-01-01 | 2023-03-01 | 59 | 50 | 55 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 157 | ML | CN | NANSHA | 2022-12-07 | 2023-01-01 | 2023-03-01 | 59 | 50 | 55 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 156 | ML | CN | NANSHA | 2022-12-06 | 2023-01-01 | 2023-03-01 | 59 | 50 | 55 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 155 | ML | CN | NANSHA | 2022-12-05 | 2023-01-01 | 2023-03-01 | 59 | 50 | 55 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 154 | ML | CN | NANSHA | 2022-12-05 | 2023-01-01 | 2023-03-01 | 59 | 50 | 55 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 153 | ML | CN | NANSHA | 2022-12-02 | 2023-01-01 | 2023-03-01 | 59 | 50 | 55 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 152 | ML | CN | NANSHA | 2022-12-01 | 2023-01-01 | 2023-03-01 | 59 | 50 | 55 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 151 | ML | CN | NANSHA | 2022-11-29 | 2023-01-01 | 2023-03-01 | 59 | 50 | 55 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 150 | ML | CN | NANSHA | 2022-11-24 | 2023-01-01 | 2023-03-01 | 59 | 50 | 55 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 159 | ML | CN | NANSHA | 2022-12-08 | 2023-01-01 | 2023-03-01 | 59 | 50 | 55 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
Sea[Sea['CountryFrom'] == 'JP'].sort_values(by='ATA',ascending = False) # visi vėlavo- rekomenduoju keisti TT į ~80-85d
| Service | CountryFrom | Uploading | Ordered | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | dienu_skirtumas | sea_atvykimas | sea_vėlavimas | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 204 | ML | JP | KOBE | 2022-10-06 | 2022-10-20 | 2023-01-19 | 91 | 55 | 65 | pavėlavo | -26 | pavėlavo | virš 3 savaičių vėlavimas |
| 203 | ML | JP | KOBE | 2022-09-02 | 2022-09-17 | 2022-12-06 | 80 | 55 | 65 | pavėlavo | -15 | pavėlavo | vėlavimas nuo 2 iki 3 savaičių |
| 202 | ML | JP | Osaka | 2022-06-22 | 2022-07-08 | 2022-10-17 | 101 | 55 | 65 | pavėlavo | -36 | pavėlavo | virš 3 savaičių vėlavimas |
Sea[Sea['CountryFrom'] == 'KR'].sort_values(by='ATA',ascending = False) # visi vėlavo- rekomenduoju keisti TT į 70-75d
| Service | CountryFrom | Uploading | Ordered | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | dienu_skirtumas | sea_atvykimas | sea_vėlavimas | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 970 | ML | KR | BUSAN | 2022-12-16 | 2023-01-07 | 2023-03-28 | 80 | 55 | 65 | pavėlavo | -15 | pavėlavo | vėlavimas nuo 2 iki 3 savaičių |
| 969 | ML | KR | BUSAN | 2022-12-07 | 2022-12-18 | 2023-02-23 | 67 | 55 | 65 | pavėlavo | -2 | pavėlavo | vėlavimas iki 1 savaitės |
| 968 | ML | KR | BUSAN | 2022-11-30 | 2022-12-18 | 2023-02-22 | 66 | 55 | 65 | pavėlavo | -1 | pavėlavo | vėlavimas iki 1 savaitės |
| 967 | ML | KR | BUSAN | 2022-10-18 | 2022-11-12 | 2023-01-23 | 72 | 55 | 65 | pavėlavo | -7 | pavėlavo | vėlavimas nuo 1 iki 2 savaičių |
| 966 | ML | KR | BUSAN | 2022-10-12 | 2022-11-02 | 2023-01-11 | 70 | 55 | 65 | pavėlavo | -5 | pavėlavo | vėlavimas iki 1 savaitės |
| 965 | ML | KR | BUSAN | 2022-09-21 | 2022-10-11 | 2022-12-23 | 73 | 55 | 65 | pavėlavo | -8 | pavėlavo | vėlavimas nuo 1 iki 2 savaičių |
Sea[Sea['CountryFrom'] == 'VN'].sort_values(by='ATA',ascending = False) # didžioji dalis krovinių vėlavo, tame tarpe
# ir paskutiniai atvykimai, todėl rekomenduoju ilginti TT iki 65-70d
| Service | CountryFrom | Uploading | Ordered | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | dienu_skirtumas | sea_atvykimas | sea_vėlavimas | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 951 | ML | VN | HO CHI MINH | 2023-01-16 | 2023-01-24 | 2023-04-05 | 71 | 55 | 65 | pavėlavo | -6 | pavėlavo | vėlavimas iki 1 savaitės |
| 949 | ML | VN | HO CHI MINH | 2023-01-02 | 2023-01-09 | 2023-03-28 | 78 | 55 | 65 | pavėlavo | -13 | pavėlavo | vėlavimas nuo 1 iki 2 savaičių |
| 950 | ML | VN | HO CHI MINH | 2023-01-03 | 2023-01-18 | 2023-03-28 | 69 | 55 | 65 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 947 | ML | VN | HO CHI MINH | 2022-11-21 | 2022-12-21 | 2023-03-07 | 76 | 55 | 65 | pavėlavo | -11 | pavėlavo | vėlavimas nuo 1 iki 2 savaičių |
| 948 | ML | VN | HO CHI MINH | 2022-12-16 | 2022-12-27 | 2023-03-07 | 70 | 55 | 65 | pavėlavo | -5 | pavėlavo | vėlavimas iki 1 savaitės |
| 946 | ML | VN | HO CHI MINH | 2022-11-21 | 2022-11-30 | 2023-02-02 | 64 | 55 | 65 | laiku | 1 | atvyko laiku | laiku |
| 945 | ML | VN | HO CHI MINH | 2022-11-03 | 2022-11-15 | 2023-01-11 | 57 | 55 | 65 | laiku | 8 | atvyko laiku | laiku |
| 944 | ML | VN | HO CHI MINH | 2022-10-12 | 2022-10-17 | 2022-12-29 | 73 | 55 | 65 | pavėlavo | -8 | pavėlavo | vėlavimas nuo 1 iki 2 savaičių |
| 942 | ML | VN | HO CHI MINH | 2022-09-05 | 2022-09-19 | 2022-11-25 | 67 | 55 | 65 | pavėlavo | -2 | pavėlavo | vėlavimas iki 1 savaitės |
| 943 | ML | VN | HO CHI MINH | 2022-09-12 | 2022-09-19 | 2022-11-25 | 67 | 55 | 65 | pavėlavo | -2 | pavėlavo | vėlavimas iki 1 savaitės |
| 940 | ML | VN | HO CHI MINH | 2022-08-04 | 2022-08-26 | 2022-10-31 | 66 | 55 | 65 | pavėlavo | -1 | pavėlavo | vėlavimas iki 1 savaitės |
| 941 | ML | VN | HO CHI MINH | 2022-08-22 | 2022-08-29 | 2022-10-31 | 63 | 55 | 65 | laiku | 2 | atvyko laiku | laiku |
Sea[Sea['CountryFrom'] == 'US'].sort_values(by='ATA',ascending = False)
# matome kad didesnė dalis krovinių vėluoja atvykti, surūšiavus pagal atvykimo datą matome kad paskutiniai kroviniai
# arba vėlavo keliomis dienomis, arba atvyko anksčiau, vidutinis TT laikas buvo viršytas tik 2 dienomis, todėl
# rekomenduoju toliau stebėti TT
| Service | CountryFrom | Uploading | Ordered | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | dienu_skirtumas | sea_atvykimas | sea_vėlavimas | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 863 | ML | US | NEW YORK | 2022-12-27 | 2023-02-10 | 2023-04-05 | 54 | 40 | 50 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 862 | ML | US | NEW YORK | 2022-11-30 | 2023-01-12 | 2023-03-07 | 54 | 40 | 50 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 861 | ML | US | NEW YORK | 2022-11-18 | 2022-12-30 | 2023-02-17 | 49 | 40 | 50 | laiku | 1 | atvyko laiku | laiku |
| 860 | ML | US | NEW YORK | 2022-11-04 | 2022-11-27 | 2023-01-04 | 38 | 40 | 50 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 858 | ML | US | NEW YORK | 2022-09-15 | 2022-10-13 | 2022-12-06 | 54 | 40 | 50 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 859 | ML | US | NEW YORK | 2022-09-21 | 2022-10-13 | 2022-12-06 | 54 | 40 | 50 | pavėlavo | -4 | pavėlavo | vėlavimas iki 1 savaitės |
| 856 | ML | US | NEW YORK | 2022-08-25 | 2022-09-28 | 2022-12-01 | 64 | 40 | 50 | pavėlavo | -14 | pavėlavo | vėlavimas nuo 2 iki 3 savaičių |
| 857 | ML | US | NEW YORK | 2022-10-07 | 2022-10-30 | 2022-12-01 | 32 | 40 | 50 | laiku | 18 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 853 | ML | US | NEW YORK | 2022-07-07 | 2022-08-19 | 2022-11-09 | 82 | 40 | 50 | pavėlavo | -32 | pavėlavo | virš 3 savaičių vėlavimas |
| 854 | ML | US | NEW YORK | 2022-07-13 | 2022-09-09 | 2022-11-09 | 61 | 40 | 50 | pavėlavo | -11 | pavėlavo | vėlavimas nuo 1 iki 2 savaičių |
| 855 | ML | US | NEW YORK | 2022-08-23 | 2022-09-09 | 2022-11-09 | 61 | 40 | 50 | pavėlavo | -11 | pavėlavo | vėlavimas nuo 1 iki 2 savaičių |
| 851 | ML | US | LOS ANGELES | 2022-08-12 | 2022-09-20 | 2022-11-03 | 44 | 40 | 50 | laiku | 6 | atvyko laiku | laiku |
| 852 | ML | US | NEW YORK | 2022-09-02 | 2022-09-21 | 2022-11-03 | 43 | 40 | 50 | laiku | 7 | atvyko laiku | laiku |
| 849 | ML | US | NEW YORK | 2022-07-27 | 2022-09-09 | 2022-10-21 | 42 | 40 | 50 | laiku | 8 | atvyko laiku | laiku |
| 850 | ML | US | NEW YORK | 2022-08-17 | 2022-09-09 | 2022-10-21 | 42 | 40 | 50 | laiku | 8 | atvyko laiku | laiku |
Sea[Sea['CountryFrom'] == 'IN'].sort_values(by='ATA',ascending = False)
#matome kad vėlavo tik vienas krovinys, kuris atvyko seniausiai,visi likę kroviniai atvyko anksčiau, todėl
# rekomenduoju mažinti TT klientams iki 45-50d
| Service | CountryFrom | Uploading | Ordered | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | dienu_skirtumas | sea_atvykimas | sea_vėlavimas | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 962 | ML | IN | NHAVA SHEVA | 2023-01-23 | 2023-02-14 | 2023-04-05 | 50 | 50 | 60 | laiku | 10 | atvyko laiku | laiku |
| 963 | ML | IN | NHAVA SHEVA | 2023-01-25 | 2023-02-14 | 2023-04-05 | 50 | 50 | 60 | laiku | 10 | atvyko laiku | laiku |
| 961 | ML | IN | NHAVA SHEVA | 2022-12-27 | 2023-01-22 | 2023-03-07 | 44 | 50 | 60 | laiku | 16 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 958 | ML | IN | NHAVA SHEVA | 2022-11-11 | 2022-12-02 | 2023-01-23 | 52 | 50 | 60 | laiku | 8 | atvyko laiku | laiku |
| 959 | ML | IN | NHAVA SHEVA | 2022-11-22 | 2022-12-12 | 2023-01-23 | 42 | 50 | 60 | laiku | 18 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 960 | ML | IN | NHAVA SHEVA | 2022-12-01 | 2022-12-11 | 2023-01-23 | 43 | 50 | 60 | laiku | 17 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 957 | ML | IN | NHAVA SHEVA | 2022-09-26 | 2022-10-30 | 2022-12-16 | 47 | 50 | 60 | laiku | 13 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 956 | ML | IN | NHAVA SHEVA | 2022-09-16 | 2022-10-09 | 2022-11-25 | 47 | 50 | 60 | laiku | 13 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 955 | ML | IN | NHAVA SHEVA | 2022-08-26 | 2022-09-26 | 2022-11-15 | 50 | 50 | 60 | laiku | 10 | atvyko laiku | laiku |
| 954 | ML | IN | NHAVA SHEVA | 2022-08-04 | 2022-09-04 | 2022-11-10 | 67 | 50 | 60 | pavėlavo | -7 | pavėlavo | vėlavimas nuo 1 iki 2 savaičių |
Sea[Sea['CountryFrom'] == 'TW'].sort_values(by='ATA',ascending = False)
#visi kroviniai atvyko anksčiau laiko, rekomenduoju mažinti tranzitinį laiką- 50-55d
| Service | CountryFrom | Uploading | Ordered | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | dienu_skirtumas | sea_atvykimas | sea_vėlavimas | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 939 | ML | TW | KAOHSIUNG | 2023-01-18 | 2023-02-10 | 2023-04-05 | 54 | 55 | 65 | laiku | 11 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 938 | ML | TW | KAOHSIUNG | 2023-01-17 | 2023-02-10 | 2023-04-05 | 54 | 55 | 65 | laiku | 11 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 937 | ML | TW | KAOHSIUNG | 2023-01-17 | 2023-02-10 | 2023-04-05 | 54 | 55 | 65 | laiku | 11 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 936 | ML | TW | KAOHSIUNG | 2023-01-16 | 2023-02-10 | 2023-04-05 | 54 | 55 | 65 | laiku | 11 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 935 | ML | TW | KAOHSIUNG | 2023-01-13 | 2023-02-10 | 2023-04-05 | 54 | 55 | 65 | laiku | 11 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 934 | ML | TW | KEELUNG | 2023-01-10 | 2023-02-01 | 2023-03-21 | 48 | 55 | 65 | laiku | 17 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 932 | ML | TW | KAOHSIUNG | 2022-12-29 | 2023-01-14 | 2023-03-09 | 54 | 55 | 65 | laiku | 11 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 931 | ML | TW | KAOHSIUNG | 2022-12-23 | 2023-01-14 | 2023-03-09 | 54 | 55 | 65 | laiku | 11 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 930 | ML | TW | KAOHSIUNG | 2022-12-21 | 2023-01-14 | 2023-03-09 | 54 | 55 | 65 | laiku | 11 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 933 | ML | TW | KEELUNG | 2023-01-04 | 2023-01-26 | 2023-03-09 | 42 | 55 | 65 | laiku | 23 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 929 | ML | TW | KEELUNG | 2022-12-13 | 2023-01-04 | 2023-03-07 | 62 | 55 | 65 | laiku | 3 | atvyko laiku | laiku |
| 928 | ML | TW | KAOHSIUNG | 2022-12-22 | 2023-01-11 | 2023-02-27 | 47 | 55 | 65 | laiku | 18 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 927 | ML | TW | KAOHSIUNG | 2022-12-14 | 2023-01-11 | 2023-02-27 | 47 | 55 | 65 | laiku | 18 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 926 | ML | TW | KAOHSIUNG | 2022-12-12 | 2023-01-11 | 2023-02-27 | 47 | 55 | 65 | laiku | 18 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 925 | ML | TW | KAOHSIUNG | 2022-12-07 | 2023-01-11 | 2023-02-27 | 47 | 55 | 65 | laiku | 18 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 924 | ML | TW | KAOHSIUNG | 2022-12-08 | 2022-12-30 | 2023-02-13 | 45 | 55 | 65 | laiku | 20 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 923 | ML | TW | KAOHSIUNG | 2022-12-07 | 2022-12-30 | 2023-02-13 | 45 | 55 | 65 | laiku | 20 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 922 | ML | TW | KAOHSIUNG | 2022-12-06 | 2022-12-30 | 2023-02-13 | 45 | 55 | 65 | laiku | 20 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 921 | ML | TW | KEELUNG | 2022-11-23 | 2022-12-22 | 2023-02-10 | 50 | 55 | 65 | laiku | 15 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 920 | ML | TW | KAOHSIUNG | 2022-11-10 | 2022-11-28 | 2023-01-19 | 52 | 55 | 65 | laiku | 13 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 919 | ML | TW | KAOHSIUNG | 2022-11-09 | 2022-11-28 | 2023-01-19 | 52 | 55 | 65 | laiku | 13 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 918 | ML | TW | KAOHSIUNG | 2022-11-08 | 2022-11-28 | 2023-01-19 | 52 | 55 | 65 | laiku | 13 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 917 | ML | TW | KAOHSIUNG | 2022-11-03 | 2022-11-19 | 2023-01-11 | 53 | 55 | 65 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 916 | ML | TW | KAOHSIUNG | 2022-11-03 | 2022-11-19 | 2023-01-11 | 53 | 55 | 65 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 915 | ML | TW | KAOHSIUNG | 2022-10-27 | 2022-11-14 | 2023-01-04 | 51 | 55 | 65 | laiku | 14 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 914 | ML | TW | KEELUNG | 2022-10-24 | 2022-11-08 | 2023-01-04 | 57 | 55 | 65 | laiku | 8 | atvyko laiku | laiku |
| 913 | ML | TW | KAOHSIUNG | 2022-10-21 | 2022-11-14 | 2023-01-04 | 51 | 55 | 65 | laiku | 14 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 910 | ML | TW | KAOHSIUNG | 2022-09-28 | 2022-10-24 | 2022-12-16 | 53 | 55 | 65 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 912 | ML | TW | KAOHSIUNG | 2022-10-11 | 2022-10-31 | 2022-12-16 | 46 | 55 | 65 | laiku | 19 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 911 | ML | TW | KAOHSIUNG | 2022-10-10 | 2022-10-24 | 2022-12-16 | 53 | 55 | 65 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 909 | ML | TW | KAOHSIUNG | 2022-08-23 | 2022-10-08 | 2022-12-01 | 54 | 55 | 65 | laiku | 11 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 908 | ML | TW | KAOHSIUNG | 2022-09-06 | 2022-09-27 | 2022-11-25 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 907 | ML | TW | KAOHSIUNG | 2022-09-05 | 2022-09-27 | 2022-11-25 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 906 | ML | TW | KEELUNG | 2022-08-25 | 2022-09-24 | 2022-11-16 | 53 | 55 | 65 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 905 | ML | TW | KAOHSIUNG | 2022-08-22 | 2022-09-05 | 2022-11-03 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 904 | ML | TW | KAOHSIUNG | 2022-08-18 | 2022-09-05 | 2022-11-03 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 903 | ML | TW | KAOHSIUNG | 2022-08-12 | 2022-09-05 | 2022-11-03 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 902 | ML | TW | KAOHSIUNG | 2022-08-11 | 2022-09-05 | 2022-11-03 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 900 | ML | TW | KAOHSIUNG | 2022-08-19 | 2022-09-05 | 2022-10-31 | 56 | 55 | 65 | laiku | 9 | atvyko laiku | laiku |
| 901 | ML | TW | KAOHSIUNG | 2022-08-19 | 2022-09-05 | 2022-10-31 | 56 | 55 | 65 | laiku | 9 | atvyko laiku | laiku |
| 899 | ML | TW | KAOHSIUNG | 2022-08-04 | 2022-08-22 | 2022-10-25 | 64 | 55 | 65 | laiku | 1 | atvyko laiku | laiku |
| 898 | ML | TW | KAOHSIUNG | 2022-08-01 | 2022-08-22 | 2022-10-25 | 64 | 55 | 65 | laiku | 1 | atvyko laiku | laiku |
Sea[Sea['Uploading'] == 'HONG KONG'].sort_values(by='ATA',ascending = False)
#matome didžioji dalis krovinių atvyko ankčiau, tame tarpe ir šviežiausi todėl rekomenduoju mažinti TT klientams iki 55-60d
| Service | CountryFrom | Uploading | Ordered | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | dienu_skirtumas | sea_atvykimas | sea_vėlavimas | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 897 | ML | HK | HONG KONG | 2023-02-01 | 2023-02-14 | 2023-04-05 | 50 | 55 | 65 | laiku | 15 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 896 | ML | HK | HONG KONG | 2023-01-18 | 2023-02-14 | 2023-04-05 | 50 | 55 | 65 | laiku | 15 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 895 | ML | HK | HONG KONG | 2023-01-17 | 2023-02-14 | 2023-04-05 | 50 | 55 | 65 | laiku | 15 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 894 | ML | HK | HONG KONG | 2023-01-12 | 2023-01-30 | 2023-03-30 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 893 | ML | HK | HONG KONG | 2023-01-11 | 2023-01-30 | 2023-03-30 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 892 | ML | HK | HONG KONG | 2023-01-10 | 2023-01-30 | 2023-03-30 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 891 | ML | HK | HONG KONG | 2023-01-05 | 2023-01-30 | 2023-03-30 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 890 | ML | HK | HONG KONG | 2022-12-12 | 2023-01-09 | 2023-03-07 | 57 | 55 | 65 | laiku | 8 | atvyko laiku | laiku |
| 889 | ML | HK | HONG KONG | 2022-12-12 | 2023-01-09 | 2023-03-07 | 57 | 55 | 65 | laiku | 8 | atvyko laiku | laiku |
| 888 | ML | HK | HONG KONG | 2022-12-05 | 2023-01-09 | 2023-03-07 | 57 | 55 | 65 | laiku | 8 | atvyko laiku | laiku |
| 887 | ML | HK | HONG KONG | 2022-11-28 | 2022-12-13 | 2023-02-10 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 886 | ML | HK | HONG KONG | 2022-11-25 | 2022-12-13 | 2023-02-10 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 885 | ML | HK | HONG KONG | 2022-11-24 | 2022-12-13 | 2023-02-10 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 882 | ML | HK | HONG KONG | 2022-11-07 | 2022-11-27 | 2023-01-19 | 53 | 55 | 65 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 884 | ML | HK | HONG KONG | 2022-11-16 | 2022-11-27 | 2023-01-19 | 53 | 55 | 65 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 883 | ML | HK | HONG KONG | 2022-11-15 | 2022-11-27 | 2023-01-19 | 53 | 55 | 65 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 881 | ML | HK | HONG KONG | 2022-10-17 | 2022-11-12 | 2023-01-04 | 53 | 55 | 65 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 879 | ML | HK | HONG KONG | 2022-10-06 | 2022-10-25 | 2022-12-29 | 65 | 55 | 65 | laiku | 0 | atvyko laiku | laiku |
| 880 | ML | HK | HONG KONG | 2022-10-18 | 2022-10-31 | 2022-12-29 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 878 | ML | HK | HONG KONG | 2022-09-19 | 2022-10-03 | 2022-11-25 | 53 | 55 | 65 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 877 | ML | HK | HONG KONG | 2022-09-16 | 2022-10-03 | 2022-11-25 | 53 | 55 | 65 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 876 | ML | HK | HONG KONG | 2022-09-13 | 2022-10-03 | 2022-11-25 | 53 | 55 | 65 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 875 | ML | HK | HONG KONG | 2022-09-13 | 2022-10-03 | 2022-11-25 | 53 | 55 | 65 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 874 | ML | HK | HONG KONG | 2022-09-09 | 2022-10-03 | 2022-11-25 | 53 | 55 | 65 | laiku | 12 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 873 | ML | HK | HONG KONG | 2022-09-07 | 2022-10-03 | 2022-11-23 | 51 | 55 | 65 | laiku | 14 | atvyko daugiau nei 11 dienomis anksčiau | laiku |
| 872 | ML | HK | HONG KONG | 2022-12-27 | 2022-09-18 | 2022-11-18 | 61 | 55 | 65 | laiku | 4 | atvyko laiku | laiku |
| 871 | ML | HK | HONG KONG | 2022-09-05 | 2022-09-18 | 2022-11-16 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 870 | ML | HK | HONG KONG | 2022-08-30 | 2022-09-18 | 2022-11-16 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 869 | ML | HK | HONG KONG | 2022-08-24 | 2022-09-18 | 2022-11-16 | 59 | 55 | 65 | laiku | 6 | atvyko laiku | laiku |
| 868 | ML | HK | HONG KONG | 2022-08-16 | 2022-08-28 | 2022-11-08 | 72 | 55 | 65 | pavėlavo | -7 | pavėlavo | vėlavimas nuo 1 iki 2 savaičių |
| 867 | ML | HK | HONG KONG | 2022-08-04 | 2022-08-28 | 2022-11-08 | 72 | 55 | 65 | pavėlavo | -7 | pavėlavo | vėlavimas nuo 1 iki 2 savaičių |
| 866 | ML | HK | HONG KONG | 2022-08-08 | 2022-08-16 | 2022-11-04 | 80 | 55 | 65 | pavėlavo | -15 | pavėlavo | vėlavimas nuo 2 iki 3 savaičių |
| 865 | ML | HK | HONG KONG | 2022-06-30 | 2022-08-16 | 2022-11-04 | 80 | 55 | 65 | pavėlavo | -15 | pavėlavo | vėlavimas nuo 2 iki 3 savaičių |
| 864 | ML | HK | HONG KONG | 2022-07-20 | 2022-08-01 | 2022-10-25 | 85 | 55 | 65 | pavėlavo | -20 | pavėlavo | vėlavimas nuo 2 iki 3 savaičių |
Yantian = Sea[Sea['Uploading'] == 'YANTIAN'].copy()
Yantian=Yantian.drop(['Service', 'CountryFrom', 'Ordered','sea_atvykimas', 'sea_vėlavimas'], axis = 1)
Yantian
| Uploading | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | dienu_skirtumas | |
|---|---|---|---|---|---|---|---|---|
| 2 | YANTIAN | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 | laiku | 16 |
| 3 | YANTIAN | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 | laiku | 16 |
| 4 | YANTIAN | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 | laiku | 16 |
| 5 | YANTIAN | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 | laiku | 16 |
| 6 | YANTIAN | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 | laiku | 16 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 175 | YANTIAN | 2023-01-17 | 2023-03-10 | 52 | 50 | 55 | laiku | 3 |
| 176 | YANTIAN | 2023-01-17 | 2023-03-10 | 52 | 50 | 55 | laiku | 3 |
| 177 | YANTIAN | 2023-01-17 | 2023-03-10 | 52 | 50 | 55 | laiku | 3 |
| 178 | YANTIAN | 2023-01-17 | 2023-03-10 | 52 | 50 | 55 | laiku | 3 |
| 179 | YANTIAN | 2023-01-17 | 2023-03-10 | 52 | 50 | 55 | laiku | 3 |
84 rows × 8 columns
Yantian['year/month'] = pd.to_datetime(Yantian['ATA']).dt.to_period('M')
Yantian
| Uploading | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | dienu_skirtumas | year/month | |
|---|---|---|---|---|---|---|---|---|---|
| 2 | YANTIAN | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 | laiku | 16 | 2022-10 |
| 3 | YANTIAN | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 | laiku | 16 | 2022-10 |
| 4 | YANTIAN | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 | laiku | 16 | 2022-10 |
| 5 | YANTIAN | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 | laiku | 16 | 2022-10 |
| 6 | YANTIAN | 2022-09-15 | 2022-10-24 | 39 | 50 | 55 | laiku | 16 | 2022-10 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 175 | YANTIAN | 2023-01-17 | 2023-03-10 | 52 | 50 | 55 | laiku | 3 | 2023-03 |
| 176 | YANTIAN | 2023-01-17 | 2023-03-10 | 52 | 50 | 55 | laiku | 3 | 2023-03 |
| 177 | YANTIAN | 2023-01-17 | 2023-03-10 | 52 | 50 | 55 | laiku | 3 | 2023-03 |
| 178 | YANTIAN | 2023-01-17 | 2023-03-10 | 52 | 50 | 55 | laiku | 3 | 2023-03 |
| 179 | YANTIAN | 2023-01-17 | 2023-03-10 | 52 | 50 | 55 | laiku | 3 | 2023-03 |
84 rows × 9 columns
sns.barplot(x='year/month', y='actual_TT', hue ='uzsakymai', data=Yantian)
sns.barplot(x='year/month', y='actual_TT', data=Yantian)
<AxesSubplot:xlabel='year/month', ylabel='actual_TT'>
#Atlikus detalesnę analizę Yantian uostui matome kad pastaraisias mėnesiais tranzito laikas nebesvyruoja taip, kaip svyravo seniau,
#matome kad šiuo metu siūlomas tranzito laikas sumažėjo ir jį būtų galima mažinti iki 45-50d.
sns.barplot(x='metai/menuo', y='actual_TT', hue ='uzsakymai', data=Ningbo)
sns.barplot(x='metai/menuo', y='actual_TT', data=Ningbo)
<AxesSubplot:xlabel='metai/menuo', ylabel='actual_TT'>
#Atlikus detalesnę analizę Ningno uostui matome kad pastaraisias mėnesiais tranzito laikas nebesvyruoja taip,
# kaip svyravo seniau,#matome kad šiuo metu siūlomas tranzito laikas sumažėjo ir jį būtų galima mažinti iki 45-50d.
Ningbo = Sea[Sea['Uploading'] == 'NINGBO'].copy()
Ningbo=Ningbo.drop(['Service', 'CountryFrom', 'Ordered','sea_atvykimas', 'sea_vėlavimas', 'dienu_skirtumas'], axis = 1)
Ningbo['menuo'] = pd.DatetimeIndex(Ningbo['ATA']).month
Ningbo['metai/menuo']=pd.to_datetime(Ningbo['ATA']).dt.to_period('M').astype(str)
Ningbo.head(10)
| Uploading | ATD | ATA | actual_TT | MIN | MAX | uzsakymai | menuo | metai/menuo | |
|---|---|---|---|---|---|---|---|---|---|
| 14 | NINGBO | 2022-09-12 | 2022-10-31 | 49 | 50 | 55 | laiku | 10 | 2022-10 |
| 24 | NINGBO | 2022-09-12 | 2022-10-31 | 49 | 50 | 55 | laiku | 10 | 2022-10 |
| 25 | NINGBO | 2022-09-12 | 2022-10-31 | 49 | 50 | 55 | laiku | 10 | 2022-10 |
| 26 | NINGBO | 2022-09-12 | 2022-10-31 | 49 | 50 | 55 | laiku | 10 | 2022-10 |
| 27 | NINGBO | 2022-09-12 | 2022-10-31 | 49 | 50 | 55 | laiku | 10 | 2022-10 |
| 28 | NINGBO | 2022-09-12 | 2022-10-31 | 49 | 50 | 55 | laiku | 10 | 2022-10 |
| 29 | NINGBO | 2022-09-12 | 2022-10-31 | 49 | 50 | 55 | laiku | 10 | 2022-10 |
| 55 | NINGBO | 2022-10-29 | 2022-12-08 | 40 | 50 | 55 | laiku | 12 | 2022-12 |
| 56 | NINGBO | 2022-10-29 | 2022-12-08 | 40 | 50 | 55 | laiku | 12 | 2022-12 |
| 57 | NINGBO | 2022-10-29 | 2022-12-08 | 40 | 50 | 55 | laiku | 12 | 2022-12 |
NIN = Ningbo[['menuo','actual_TT']].copy()
from sklearn.linear_model import LinearRegression
X = NIN[['menuo']]
X.head(3)
| menuo | |
|---|---|
| 14 | 10 |
| 24 | 10 |
| 25 | 10 |
y = NIN['actual_TT']
y.head(2)
14 49 24 49 Name: actual_TT, dtype: int32
model = LinearRegression()
model
LinearRegression()
model.fit(X,y)
LinearRegression()
NIN['prediction'] = model.predict(X)
NIN.head(10)
| menuo | actual_TT | prediction | |
|---|---|---|---|
| 14 | 10 | 49 | 43.917630 |
| 24 | 10 | 49 | 43.917630 |
| 25 | 10 | 49 | 43.917630 |
| 26 | 10 | 49 | 43.917630 |
| 27 | 10 | 49 | 43.917630 |
| 28 | 10 | 49 | 43.917630 |
| 29 | 10 | 49 | 43.917630 |
| 55 | 12 | 40 | 40.922172 |
| 56 | 12 | 40 | 40.922172 |
| 57 | 12 | 40 | 40.922172 |
plt.scatter(X,y,color='green')
plt.scatter(X,NIN['prediction'], color='tomato')
#plt.plot(X,NIN['prediction'], color='tomato')
<matplotlib.collections.PathCollection at 0x221bfdefd60>